package com.mdxq.mall.order.controller;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.mdxq.mall.order.dto.ReturnApplyInfoDTO;
import com.mdxq.mall.response.R;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import org.springframework.web.bind.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import com.mdxq.mall.order.entity.OrderReturnApply;
import com.mdxq.mall.order.service.OrderReturnApplyService;

import java.text.DateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.Arrays;
import java.util.List;

/**
 * 订单退货申请 控制层。
 *
 * @author zdy
 * @since 2025-01-19
 */
@RestController
@RequestMapping("/api/v1/returnApply")
public class OrderReturnApplyController {

    @Autowired
    private OrderReturnApplyService orderReturnApplyService;

    /**
     * 添加订单退货申请。
     *
     * @param orderReturnApply 订单退货申请
     * @return {@code true} 添加成功，{@code false} 添加失败
     */
    @PostMapping("save")
    public boolean save(@RequestBody OrderReturnApply orderReturnApply) {
        return orderReturnApplyService.save(orderReturnApply);
    }

    /**
     * 根据主键删除订单退货申请。
     *
     * @param ids 主键
     * @return {@code true} 删除成功，{@code false} 删除失败
     */
    @PostMapping("delete")
    public R remove(@RequestParam String ids) {
        List<String> idList = Arrays.asList(ids.split(","));
        return R.ok(orderReturnApplyService.removeByIds(idList));
    }

    /**
     * 根据主键更新订单退货申请。
     *
     * @param orderReturnApply 订单退货申请
     * @return {@code true} 更新成功，{@code false} 更新失败
     */
    @PutMapping("update")
    public boolean update(@RequestBody OrderReturnApply orderReturnApply) {
        return orderReturnApplyService.updateById(orderReturnApply);
    }

    /**
     * 查询所有订单退货申请。
     *
     * @return 所有数据
     */
    @GetMapping("list")
    public List<OrderReturnApply> list() {
        return orderReturnApplyService.list();
    }

    /**
     * 根据订单退货申请主键获取详细信息。
     *
     * @param id 订单退货申请主键
     * @return 订单退货申请详情
     */
    @GetMapping("getInfo/{id}")
    public R getInfo(@PathVariable Long id) {
        return R.ok(orderReturnApplyService.getById(id));
    }

    /**
     * 分页查询订单退货申请。
     * @param page 分页对象
     * @param id
     * @param status
     * @param createTime
     * @param handleMan
     * @return
     */
    @GetMapping("page")
    public R page(Page<OrderReturnApply> page, Long id, Integer status, LocalDate createTime, String handleMan) {
        QueryWrapper queryWrapper = new QueryWrapper();
        if (id!=null){
            queryWrapper.like("id",id);
        }
        if (status!=null){
            queryWrapper.eq("status",status);
        }
        if (createTime!=null){
            queryWrapper.between("create_time",
                    LocalDateTime.of(createTime, LocalTime.MIN),
                    LocalDateTime.of(createTime, LocalTime.MAX));
        }
        if (StrUtil.isNotBlank(handleMan)){
            queryWrapper.like("handle_man",handleMan);
        }
        return R.ok(orderReturnApplyService.page(page,queryWrapper));
    }

    /**
     * 退货处理   确认退货/拒接退货/确认收到退货
     * @param id 退货处理id
     * @param dto 封装退货处理的部分id
     * @return
     */
    @PostMapping("/update/status/{id}")
    public R updateStatus(@PathVariable Long id, @RequestBody ReturnApplyInfoDTO dto){
        OrderReturnApply returnApply = BeanUtil.copyProperties(dto, OrderReturnApply.class);
        returnApply.setId(id);
        returnApply.setHandleTime(LocalDateTime.now());
        return R.ok(orderReturnApplyService.updateById(returnApply,true));
    }
}
